// 商品路由模块

// 加载模块
const express = require('express')
const goodsModel = require('../db/goodsModel.js')
const path = require('path')

// 创建路由表（空表）
const router = express.Router()

// 向路由表添加内容：

// 上传文件接口：
// 使用multer插件接收文件
// 安装：npm i multer
// multer版本："multer": "^1.4.5-lts.1"
// 加载模块
const multer = require('multer')


/* // 创建接收文件对象（添加multer配置）
// dest:'./www/uploads' 设置上传文件的存储目录
const upload = multer({dest:'./www/uploads'})
// upload.single('upload_img') 接收单个文件（上传文件的name值）
router.post('/upload',upload.single('upload_img'),(req,res)=>{
    // 接收文件之后，在req对象中有一个file属性（上传的文件信息对象）
    console.log( req.file )
    // req.file = {
    //     fieldname: 'upload_img',
    //     originalname: '1.png',
    //     encoding: '7bit',
    //     mimetype: 'image/png',
    //     destination: './www/uploads',
    //     filename: '53c51e944a5aa51023eee88d09be6e06',
    //     path: 'www\\uploads\\53c51e944a5aa51023eee88d09be6e06',
    //     size: 651367
    // }

    // 随着上传文件一起提交的其他数据
    console.log( req.body.user )// 'xiaocuo'
    
    // 响应前端
    res.send('upload ok')
}) */


/* // 创建上传文件对象（添加配置 存储目录 文件名称）
const upload = multer({storage: multer.diskStorage({
    destination: function (req,file,cb){
        // req 请求信息对象
        // file 上传文件信息对象
        // cb 回调函数，用于设置上传文件的存储目录
        // console.log( req )
        console.log( file )
        // file = {
        //     fieldname: 'upload_img',
        //     originalname: '6.png',
        //     encoding: '7bit',
        //     mimetype: 'image/png'
        // }
          
        cb(null,'./www/uploads')
        // null 不修改上传文件数据流
        // './www/uploads' 上传文件的存储目录
    },
    filename: function (req,file,cb){
        // req 请求信息对象
        // file 上传文件信息对象
        // cb 回调函数，用于设置上传文件的名称
        // console.log( req )
        console.log( file )
        // file = {
        //     fieldname: 'upload_img',
        //     originalname: '6.png',
        //     encoding: '7bit',
        //     mimetype: 'image/png'
        // }

        // cb(null,'hehe.png')
        // null 不修改上传文件数据流
        // 'hehe.png' 上传文件的名称
        // 问题：每一个上传的文件都叫 hehe.png
        // 文件后缀：使用原始文件名中的后缀
        // 文件名称：upload_+Date.now()+'_'+Math.random()+path.extname(file.originalname)
        let filen = 'upload_'+Date.now()+'_'+Math.random()+path.extname(file.originalname)
        cb(null,filen)
    }
})})
router.post('/upload',upload.single('upload_img'),(req,res)=>{
    // 接收上传文件之后
    console.log( req.file )
    req.file = {
        fieldname: 'upload_img',
        originalname: '3.png',
        encoding: '7bit',
        mimetype: 'image/png',
        destination: './www/uploads',
        filename: 'upload_1671516222085_0.09338329484167374.png',
        path: 'www\\uploads\\upload_1671516222085_0.09338329484167374.png',
        size: 389990
    }
    // 上传文件地址：'http://localhost:8080/static/uploads/'+req.file.filename
      
    console.log( req.body.user )// 'xiaocuo123'

    // 响应前端
    res.send({"code":1,"msg":"上传成功"})
})
 */


// 创建一个上传文件的对象upload
const upload = multer({
    limits: {
        // 限制上传文件最大为：500kb
        fileSize: 1024 *500
    },
    fileFilter: function (req,file,cb){
        // console.log( file )
        // file = {
        //     fieldname: 'upload_img',
        //     originalname: '6.png',
        //     encoding: '7bit',
        //     mimetype: 'image/png'
        // }
        // cb(null,true) // 接收文件
        // cb(null,false) // 拒收文件

        // 只接收图片文件（png jpg jpeg gif svg）
        // let reg = /\.(png|jpg|jpeg|gif|svg)$/
        let reg = /\.(png|jpe?g|gif|svg)$/
        if (reg.test(file.originalname)) {
            // 上传文件是图片，接收文件
            cb(null,true)
        } else {
            // 上传文件不是图片，拒收文件
            cb(null,false)
        }
    },
    storage: multer.diskStorage({
        destination: function (req,file,cb){
            // 设置上传文件的存储目录
            cb(null,'./www/uploads')
        },
        filename: function (req,file,cb){
            // 设置上传文件的名称和后缀
            let filen = 'upload_'+Date.now()+'_'+parseInt(Math.random()*1000000)+path.extname(file.originalname)
            cb(null,filen)
        }
    })
})
let fun = upload.single('upload_img')// 接收单个文件
/**
* @api {post} /goods/upload 上传单个文件
* @apiGroup goods
*
* @apiParam {String} name 上传文件的名称为upload_img
*
* @apiSuccessExample 返回数据示例:
* {
*     "code": 1,
*     "msg": "上传成功",
*     "imgurl": "图片地址",
* }
*/
router.post('/upload',(req,res)=>{
    fun(req,res,(err)=>{
        // 接收文件完成时执行
        if (err) {
            // 上传文件大小超过限制了
            return res.send({"code":-1,"msg":"上传文件最大为500kb"})
        }
        // 当上传文件被拒收时，req.file 没有值 -> undefined
        if (!req.file) {
            // 上传文件被拒收了
            return res.send({"code":-2,"msg":"亲，只能上传图片文件"})
        }
        // 文件上传成功
        let imgurl = 'http://localhost:8080/static/uploads/'+ req.file.filename
        res.send({"code":1,"msg":"图片上传成功","imgurl":imgurl})
    })// 异步接收文件
})


// 创建一个上传文件的对象upload
const uploads = multer({
    limits: {
        // 限制上传文件最大为：500kb
        fileSize: 1024 *500
    },
    fileFilter: function (req,file,cb){
        // 只接收图片文件（png jpg jpeg gif svg）
        // let reg = /\.(png|jpg|jpeg|gif|svg)$/
        let reg = /\.(png|jpe?g|gif|svg)$/
        if (reg.test(file.originalname)) {
            // 上传文件是图片，接收文件
            cb(null,true)
        } else {
            // 上传文件不是图片，拒收文件
            cb(null,false)
        }
    },
    storage: multer.diskStorage({
        destination: function (req,file,cb){
            // 设置上传文件的存储目录
            cb(null,'./www/uploads')
        },
        filename: function (req,file,cb){
            // 设置上传文件的名称和后缀
            let filen = 'upload_'+Date.now()+'_'+parseInt(Math.random()*1000000)+path.extname(file.originalname)
            cb(null,filen)
        }
    })
})
let funs = uploads.array('upload_img')// 接收多个文件
/**
* @api {post} /goods/uploads 上传多个文件
* @apiGroup goods
*
* @apiParam {String} name 上传文件的名称为upload_img
*
* @apiSuccessExample 返回数据示例:
* {
*     "code": 1,
*     "msg": "上传成功",
*     "imgurls": ['url1','url2'],
* }
*/
router.post('/uploads',(req,res)=>{
    funs(req,res,(err)=>{
        // 接收文件完成时执行
        if (err) {
            // 上传文件大小超过限制了
            return res.send({"code":-1,"msg":"上传文件最大为500kb"})
        }
        // console.log( req.files )// [{req.file},{req.file},{req.file}]
        if (req.files.length === 0) {
            // 上传文件被拒收了
            return res.send({"code":-2,"msg":"亲，只能上传图片文件"})
        }
        // 文件上传成功
        let imgurls = []
        req.files.forEach((item)=>{
            let imgurl = 'http://localhost:8080/static/uploads/'+ item.filename
            imgurls.push(imgurl)
        })
        res.send({"code":1,"msg":"图片上传成功","imgurls":imgurls})
    })// 异步接收文件
})


// 添加商品接口：http://localhost:8080/goods/add
router.post('/add',(req,res)=>{
    // 响应前端
    res.send({"code":1,"msg":"添加成功"})
})

// 删除商品接口：http://localhost:8080/goods/del
router.post('/del',(req,res)=>{
    // 响应前端
    res.send({"code":1,"msg":"删除成功"})
})

// 修改商品接口：http://localhost:8080/goods/update
router.post('/update',(req,res)=>{
    // 响应前端
    res.send({"code":1,"msg":"修改成功"})
})

// 查询商品接口：http://localhost:8080/goods/search
router.post('/search',(req,res)=>{
    // 响应前端
    res.send({"code":1,"msg":"查询成功"})
})

// 通过服务端代理请求接口：http://localhost:8080/goods/datas
// 接口地址：https://m.you.163.com/xhr/index.json
const https = require('https')
let url = 'https://m.you.163.com/xhr/index.json'
router.get('/datas',(req,res)=>{
    // 服务端没有跨域限制
    // 服务端去别人的服务器请求数据并返回给我们的前端
    let tmp = ''
    https.get(url,(result)=>{
        // 接收到数据片段时，会触发data事件
        result.on('data',(chunk)=>{
            // console.log( chunk )// 数据片段（Buffer二进制数据）
            // console.log( chunk+'' )// 数据片段（转成字符串数据）
            // console.log( '-----------------------------------' )

            // 将多段数据拼接起来
            tmp += chunk
        })
        // 当数据片段接收完成时，触发end事件
        result.on('end',()=>{
            // 响应前端
            res.send(tmp)
        })
    })
})

// CORS跨域资源共享接口：http://localhost:8080/goods/test1
// CORS是W3C标准，全称 跨域资源共享（Cross-Origin-Resource-Sharing）
// CORS允许浏览器向跨域服务器发送ajax请求
// 使用CORS需要满足两点：
// 1.浏览器支持CORS规范（IE10+支持）
// 2.服务端需要设置一些响应头（nodejs直接使用cors中间件）
router.get('/test1',(req,res)=>{
    // 响应前端
    res.send({"name":"张三","age":23,"sex":"男"})
})

// jsonp接口：http://localhost:8080/goods/test2
router.get('/test2',(req,res)=>{
    let {callback} = req.query
    console.log( callback )// 'hehe'

    // 响应前端
    // res.send('hello')
    // res.send('var hehe = "呵呵"')
    // res.send('test(123)')
    // res.send('test({"name":"张三","age":23,"sex":"男"})')

    let data = {"name":"张三","age":23,"sex":"男"}
    setTimeout(()=>{
        res.send(callback+'('+JSON.stringify(data)+')')
    },1000)
})

// 导出路由表
module.exports = router
